% ------------------------------------------------ КОНТРОЛЛЕР АСИНХРОННОГО ПЕРЕДАТЧИКА RS232C -------------------------------------------- %
% ------------------------------------------------ Листинг конфигурации  " БЛОКА УПРАВЛЕНИЯ " -------------------------------------------- %

TITLE "ask_1sk0";

SUBDESIGN log_1sk0
(
% --------------------------------------------- Интерфейс сигнального процессора TMS320C51PQ --------------------------------------------- %
% СШД : системная шина данных ------------------------------------------------------------------------------------------------------------ %
 tms_db[8..0]			: BIDIR;
% САШ : системная адресная шина ---------------------------------------------------------------------------------------------------------- %
 d_a[2..0]			: INPUT;
% СШУ : системная шина управления -------------------------------------------------------------------------------------------------------- %
 tms_br				: INPUT;
 tms_ds				: INPUT;
 lfb_f1_i2			: INPUT;
 tms_is				: INPUT;
 lfb_f1_i1			: INPUT;
 tms_rd				: INPUT;
 tms_we				: INPUT;
 tms_rs				: INPUT;
 tms_tout			: INPUT;
 lfb_f5_i1			: INPUT;
 lfb_f2_o1			: OUTPUT;
 tms_int4			: OUTPUT;
% ------------------------------------------------ БУПП : блок управления памятью программ ----------------------------------------------- %
% ШУПП : шина управления памятью программ ------------------------------------------------------------------------------------------------ %
 lfb_f1_o1			: OUTPUT;
% ------------------------------------ БУВУОН : блок управления внешними устройствами общего назначения ---------------------------------- %
% ШУВУОН : шина управления внешними устройствами общего назначения ----------------------------------------------------------------------- %
 lfb_f4_o1			: OUTPUT;
 lfb_f5_o1			: OUTPUT;
 lfb_f5_o2			: OUTPUT;
 cs				: OUTPUT;
 ncs				: OUTPUT;
% -------------------------------------------------------- БВВ : блок ввода-вывода ------------------------------------------------------- %
% ШВВ : шина ввода-вывода ---------------------------------------------------------------------------------------------------------------- %
 nstatus[6..0]			: INPUT;
 frame				: OUTPUT;
 nconfig			: OUTPUT;
 po1_o1				: OUTPUT;
 po1_o2				: OUTPUT;
 d_o[3..0]			: OUTPUT;
 f_etalon			: OUTPUT;
 lfb_f5_c2_clrn			: INPUT;
 lfb_f2_i1			: INPUT;
% --------------------------------------------------- АПП : асинхронный приёмопередатчик ------------------------------------------------- %
% Передача информации -------------------------------------------------------------------------------------------------------------------- %
 uart_txd			: OUTPUT;
% Готовность к приёму -------------------------------------------------------------------------------------------------------------------- %
 uart_cts			: OUTPUT;
% Получение информации ------------------------------------------------------------------------------------------------------------------- %
 uart_rxd			: INPUT;
 )

VARIABLE
% ------------------------------------ БУВУОН : блок управления внешними устройствами общего назначения ---------------------------------- %
 do[7..0]			: NODE;
 lfb_f5_c[2..0]			: DFF;
% -------------------------------------------------------- БВВ : блок ввода-вывода ------------------------------------------------------- %
 pi1[2..0]			: NODE;
 po1[2..0], f_etalon		: DFF;
 cf				: MACHINE WITH STATES (f0, f1, f2, f3, f4);
% --------------------------------------------------- АПП : асинхронный передатчик ------------------------------------------------------- %
 tb[8..0]			: NODE;
 tbo[8..0], tbs			: DFF;
 ut				: MACHINE WITH STATES (t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
 tn[8..0], tf, ti		: NODE;
 uart_txd, uart_cts		: DFF;
% ---------------------------------------------------------- БК : блок контроля ---------------------------------------------------------- %
 pii[8..0]			: TRI;
 lfb_f2_c[14..0], tms_int4	: DFF;

BEGIN
% ------------------------------------------------ БУПП : блок управления памятью программ ----------------------------------------------- %
% -PRGMSS : сигнал выбора микросхем ПП --------------------------------------------------------------------------------------------------- %
 lfb_f1_o1			=  lfb_f1_i2 # lfb_f1_i1;
% ------------------------------------ БУВУОН : блок управления внешними устройствами общего назначения ---------------------------------- %
	TABLE
	d_a[2..0], tms_ds, tms_is =>   do[7..0];
	  B"000",     1,      0	  => B"11111110";
	  B"001",     1,      0	  => B"11111101";
	  B"010",     1,      0	  => B"11111011";
	  B"011",     1,      0	  => B"11110111";
	  B"100",     1,      0	  => B"11101111";
	  B"101",     1,      0	  => B"11011111";
	  B"110",     1,      0	  => B"10111111";
	  B"111",     1,      0	  => B"01111111";
	  B"XXX",     0,      X	  => B"11111111";
	  B"XXX",     X,      1	  => B"11111111";
	END TABLE;
% -EGMRDS : стробирование цикла чтения из глобальной памяти ------------------------------------------------------------------------------ %
 lfb_f4_o1			=  tms_br # tms_rd;
% ESCLKOx : системные сигналы синхронизации ---------------------------------------------------------------------------------------------- %
 lfb_f5_c[].d			=  lfb_f5_c[].q+1;
 lfb_f5_c[].clk			=  lfb_f5_i1;
 lfb_f5_c[1..0].clrn		=  tms_rs;
 lfb_f5_c2.clrn			=  tms_rs & !lfb_f5_c2_clrn;
 lfb_f5_o1			=  lfb_f5_c1.q & !po11.q;
 lfb_f5_o2			=  lfb_f5_c2.q;
% EPORT0S : сигнал выбора устройства ввода-вывода ---------------------------------------------------------------------------------------- %
 cs				= !do0;
% -EPORT0S : сигнал выбора устройства ввода-вывода --------------------------------------------------------------------------------------- %
 ncs				=  do0;
% ESFRAME : системный сигнал кадровой синхронизации -------------------------------------------------------------------------------------- %
 cf.clk				=  lfb_f5_i1;
 cf.reset			= !lfb_f2_c14.q;
	TABLE
	  cf			  => cf, frame;
	  f0			  => f1,   0;
	  f1			  => f2,   1;
	  f2			  => f3,   0;
	  f3			  => f4,   1;
	  f4			  => f4,   0;
	END TABLE;
% -------------------------------------------------------- БВВ : блок ввода-вывода ------------------------------------------------------- %
% OBR : буферный регистр вывода информации ----------------------------------------------------------------------------------------------- %
 pi1[]				=  tms_db[2..0];
 po1[].d			=  pi1[];
 po1[].clk			=  tms_we # do1;
 po10.clrn			=  tms_rs;
 po11.prn			=  tms_rs;
 po12.clrn			=  tms_rs;
% OP : порт вывода ----------------------------------------------------------------------------------------------------------------------- %
 nconfig			=  po10.q;
 po1_o1				=  po11.q;
 po1_o2				=  po12.q;
% EPxRDS : сигналы стробирования циклов чтения из устройств ввода-вывода ----------------------------------------------------------------- %
 d_o[]				=  tms_rd # do[7..4];
% ESCLKO3 : системный сигнал синхронизации ----------------------------------------------------------------------------------------------- %
 f_etalon.d			= !f_etalon.q;
 f_etalon.clk			=  tms_tout;
 f_etalon.clrn			= !po11.q;
% --------------------------------------------------- АПП : асинхронный приёмопередатчик ------------------------------------------------- %
% SHTR : передающий сдвигающий регистр --------------------------------------------------------------------------------------------------- %
 tb[7..0]			=  tms_db[7..0];
 tb8				=  VCC;
 tbo[].d			=  tb[];
 tbo[].clk			=  tms_we # do2;
 tbo[7..0].clrn			=  tms_rs;
 tbs.d				=  tbo8.q;
 tbs.clk			= !tms_tout;
 tbs.clrn			=  tms_rs & tf;
 ut.clk				=  tms_tout;
 ut.reset			= !tms_rs;
	TABLE
	 ut,		tbs.q	  => ut,   tn[8..0],  tf, ti;
	 t0,		  0	  => t0, B"111111111", 1,  1;
	 t0,		  1	  => t1, B"111111110", 1,  1;
	 t1,		  X	  => t2, B"111111101", 0,  1;
	 t2,		  X	  => t3, B"111111011", 0,  1;
	 t3,		  X	  => t4, B"111110111", 0,  1;
	 t4,		  X	  => t5, B"111101111", 0,  1;
	 t5,		  X	  => t6, B"111011111", 0,  1;
	 t6,		  X	  => t7, B"110111111", 0,  1;
	 t7,		  X	  => t8, B"101111111", 0,  1;
	 t8,		  X	  => t9, B"011111111", 0,  1;
	 t9,		  X	  => t0, B"111111111", 0,  0;
	END TABLE;
 tbo8.clrn			=  tms_rs & tf;
% ASPTXD : передача информации ----------------------------------------------------------------------------------------------------------- %
 uart_txd.d			=  tn0 & (tbo0.q # tn1) & (tbo1.q # tn2) & (tbo2.q # tn3) & (tbo3.q # tn4) & (tbo4.q # tn5) & (tbo5.q # tn6)
				       & (tbo6.q # tn7) & (tbo7.q # tn8);
 uart_txd.clk			=  tms_tout;
 uart_txd.prn			=  tms_rs;
% -ASPCTS : Готовность к приёму ---------------------------------------------------------------------------------------------------------- %
 uart_cts.d			=  ti;
 uart_cts.clk			=  tms_tout;
 uart_cts.prn			=  (tms_we # do2) & tms_rs;
% ---------------------------------------------------------- БК : блок контроля ---------------------------------------------------------- %
% IBR , STRx : регистры ------------------------------------------------------------------------------------------------------------------ %
 pii[6..0].in			=  nstatus[] # do1;
 pii[8..7].in			=  GND;
 pii[].oe			=  tms_rd !# (do1 & do3);
 tms_db[]			=  pii[].out;
% -INTREQ1 : сигнал прерывания TMS320C51 #1 ---------------------------------------------------------------------------------------------- %
 lfb_f2_c[].d			=  lfb_f2_c[].q+1;
 lfb_f2_c[].clk			=  tms_tout;
 lfb_f2_c[].clrn		=  tms_rs & !(lfb_f2_c0.q & lfb_f2_c8.q & lfb_f2_c9.q & lfb_f2_c11.q & lfb_f2_c14.q); 
 lfb_f2_o1			=  lfb_f2_c14.q & !lfb_f2_i1;
% -INTREQ2 : сигнал прерывания TMS320C51 #4 ---------------------------------------------------------------------------------------------- %
 tms_int4.d			=  GND;
 tms_int4.clk			=  uart_rxd;
 tms_int4.prn			=  (tms_rd # do3) & tms_rs;
END;